home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / doom / quake_ad.zip / RESPAWN.ZIP / SRC / SHALRATH.QC < prev    next >
Text File  |  1997-03-16  |  10KB  |  282 lines

  1. /*
  2. ==============================================================================
  3.  
  4. SHAL-RATH
  5.  
  6. ==============================================================================
  7. */
  8. $cd id1/models/shalrath
  9. $origin 0 0 24
  10. $base base
  11. $skin skin
  12. $scale 0.7
  13.  
  14. $frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
  15. $frame attack9 attack10 attack11
  16.  
  17. $frame pain1 pain2 pain3 pain4 pain5 
  18.  
  19. $frame death1 death2 death3 death4 death5 death6 death7
  20.  
  21. $frame    walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
  22. $frame    walk11 walk12
  23.  
  24. void() shalrath_pain;
  25. void() ShalMissile;
  26. //--------------------------------------------------------- New Code --------
  27. void() shal_death8;
  28. //---------------------------------------------------------------------------
  29.  
  30. void() shal_stand     =[      $walk1,       shal_stand    ] {ai_stand();};
  31.  
  32. void() shal_walk1     =[      $walk2,       shal_walk2    ] {
  33. if (random() < 0.2)
  34.     sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE);
  35. ai_walk(6);};
  36. void() shal_walk2     =[      $walk3,       shal_walk3    ] {ai_walk(4);};
  37. void() shal_walk3     =[      $walk4,       shal_walk4    ] {ai_walk(0);};
  38. void() shal_walk4     =[      $walk5,       shal_walk5    ] {ai_walk(0);};
  39. void() shal_walk5     =[      $walk6,       shal_walk6    ] {ai_walk(0);};
  40. void() shal_walk6     =[      $walk7,       shal_walk7    ] {ai_walk(0);};
  41. void() shal_walk7     =[      $walk8,       shal_walk8    ] {ai_walk(5);};
  42. void() shal_walk8     =[      $walk9,       shal_walk9    ] {ai_walk(6);};
  43. void() shal_walk9     =[      $walk10,       shal_walk10    ] {ai_walk(5);};
  44. void() shal_walk10    =[      $walk11,       shal_walk11    ] {ai_walk(0);};
  45. void() shal_walk11    =[      $walk12,       shal_walk12    ] {ai_walk(4);};
  46. void() shal_walk12    =[      $walk1,       shal_walk1    ] {ai_walk(5);};
  47.  
  48. void() shal_run1     =[      $walk2,       shal_run2    ] {
  49. if (random() < 0.2)
  50.     sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE);
  51. ai_run(6);};
  52. void() shal_run2     =[      $walk3,       shal_run3    ] {ai_run(4);};
  53. void() shal_run3     =[      $walk4,       shal_run4    ] {ai_run(0);};
  54. void() shal_run4     =[      $walk5,       shal_run5    ] {ai_run(0);};
  55. void() shal_run5     =[      $walk6,       shal_run6    ] {ai_run(0);};
  56. void() shal_run6     =[      $walk7,       shal_run7    ] {ai_run(0);};
  57. void() shal_run7     =[      $walk8,       shal_run8    ] {ai_run(5);};
  58. void() shal_run8     =[      $walk9,       shal_run9    ] {ai_run(6);};
  59. void() shal_run9     =[      $walk10,       shal_run10    ] {ai_run(5);};
  60. void() shal_run10    =[      $walk11,       shal_run11    ] {ai_run(0);};
  61. void() shal_run11    =[      $walk12,       shal_run12    ] {ai_run(4);};
  62. void() shal_run12    =[      $walk1,       shal_run1    ] {ai_run(5);};
  63.  
  64. void() shal_attack1     =[      $attack1,       shal_attack2    ] {
  65. sound (self, CHAN_VOICE, "shalrath/attack.wav", 1, ATTN_NORM);
  66. ai_face();
  67. };
  68. void() shal_attack2     =[      $attack2,       shal_attack3    ] {ai_face();};
  69. void() shal_attack3     =[      $attack3,       shal_attack4    ] {ai_face();};
  70. void() shal_attack4     =[      $attack4,       shal_attack5    ] {ai_face();};
  71. void() shal_attack5     =[      $attack5,       shal_attack6    ] {ai_face();};
  72. void() shal_attack6     =[      $attack6,       shal_attack7    ] {ai_face();};
  73. void() shal_attack7     =[      $attack7,       shal_attack8    ] {ai_face();};
  74. void() shal_attack8     =[      $attack8,       shal_attack9    ] {ai_face();};
  75. void() shal_attack9     =[      $attack9,       shal_attack10   ] {ShalMissile();};
  76. void() shal_attack10    =[      $attack10,      shal_attack11   ] {ai_face();};
  77. void() shal_attack11    =[      $attack11,      shal_run1   ] {};
  78.  
  79. void() shal_pain1       =[      $pain1, shal_pain2      ] {};
  80. void() shal_pain2       =[      $pain2, shal_pain3      ] {};
  81. void() shal_pain3       =[      $pain3, shal_pain4      ] {};
  82. void() shal_pain4       =[      $pain4, shal_pain5      ] {};
  83. void() shal_pain5       =[      $pain5, shal_run1      ] {};
  84.  
  85. //--------------------------------------------------------- New Code --------
  86. //  The vore comes back to life.  It gets up on its legs!
  87. //---------------------------------------------------------------------------
  88. void()  shal_revive1    =[      $death7,        shal_revive3    ]
  89. {       self.nextthink = self.nextthink + PM_SleepTime();
  90.         self.health = 0;
  91. };
  92. void()  shal_revive2    =[      $death7,        shal_revive3    ]
  93. {       self.nextthink = self.nextthink + 5;    };
  94. void()  shal_revive3    =[      $death7,        shal_revive4    ]
  95. {       // see if ok to stand up
  96.         self.health = 400;
  97.         sound (self, CHAN_VOICE, "shalrath/idle.wav", 1, ATTN_IDLE);
  98.         self.solid = SOLID_SLIDEBOX;
  99.         if (!walkmove (0, 0))
  100.         {       self.think = shal_revive2;
  101.                 self.solid = SOLID_NOT;
  102.                 return;
  103.         }
  104. };
  105. void()  shal_revive4    =[      $death6,        shal_revive5    ] {};
  106. void()  shal_revive5    =[      $death5,        shal_revive6    ] {};
  107. void()  shal_revive6    =[      $death4,        shal_revive7    ] {};
  108. void()  shal_revive7    =[      $death3,        shal_revive8    ] {ai_painforward(8);};
  109. void()  shal_revive8    =[      $death2,        shal_revive9    ] {};
  110. void()  shal_revive9    =[      $death1,        shal_revive10   ] {ai_painforward(12);};
  111. void()  shal_revive10   =[      $pain5,         shal_run1       ]
  112. {       ai_painforward(12);
  113.         self.takedamage = DAMAGE_AIM;
  114. };
  115. //---------------------------------------------------------------------------
  116.  
  117. void() shal_death1      =[      $death1,        shal_death2     ] {};
  118. void() shal_death2      =[      $death2,        shal_death3     ] {};
  119. void() shal_death3      =[      $death3,        shal_death4     ] {};
  120. void() shal_death4      =[      $death4,        shal_death5     ] {};
  121. void() shal_death5      =[      $death5,        shal_death6     ] {};
  122. void() shal_death6      =[      $death6,        shal_death7     ] {};
  123. //--------------------------------------------------------- Code Change -----
  124. void() shal_death7 =
  125. {       if (PM_Revive())  shal_revive1();
  126.         else  shal_death8();
  127. };
  128. void() shal_death8      =[      $death7,        shal_death7     ] {};
  129. //---------------------------------------------------------------------------
  130.  
  131.  
  132. void() shalrath_pain =
  133. {
  134.     if (self.pain_finished > time)
  135.         return;
  136.  
  137.     sound (self, CHAN_VOICE, "shalrath/pain.wav", 1, ATTN_NORM);
  138.     shal_pain1();
  139.     self.pain_finished = time + 3;
  140. };
  141.  
  142. void() shalrath_die =
  143. {
  144. // check for gib
  145.     if (self.health < -90)
  146.     {
  147.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  148.         ThrowHead ("progs/h_shal.mdl", self.health);
  149.         ThrowGib ("progs/gib1.mdl", self.health);
  150.         ThrowGib ("progs/gib2.mdl", self.health);
  151.         ThrowGib ("progs/gib3.mdl", self.health);
  152.         return;
  153.     }
  154.  
  155.     sound (self, CHAN_VOICE, "shalrath/death.wav", 1, ATTN_NORM);
  156.     shal_death1();
  157.     self.solid = SOLID_NOT;
  158.     // insert death sounds here
  159. };
  160.  
  161. /*
  162. ================
  163. ShalMissile
  164. ================
  165. */
  166. void() ShalMissileTouch;
  167. void() ShalHome;
  168. void() ShalMissile =
  169. {
  170.     local    entity     missile;
  171.     local    vector    dir;
  172.     local    float    dist, flytime;
  173.  
  174.     dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
  175.     dist = vlen (self.enemy.origin - self.origin);
  176.     flytime = dist * 0.002;
  177.     if (flytime < 0.1)
  178.         flytime = 0.1;
  179.  
  180.     self.effects = self.effects | EF_MUZZLEFLASH;
  181.     sound (self, CHAN_WEAPON, "shalrath/attack2.wav", 1, ATTN_NORM);
  182.  
  183.     missile = spawn ();
  184.     missile.owner = self;
  185.  
  186.     missile.solid = SOLID_BBOX;
  187.     missile.movetype = MOVETYPE_FLYMISSILE;
  188.     setmodel (missile, "progs/v_spike.mdl");
  189.  
  190.     setsize (missile, '0 0 0', '0 0 0');        
  191.  
  192.     missile.origin = self.origin + '0 0 10';
  193.     missile.velocity = dir * 400;
  194.     missile.avelocity = '300 300 300';
  195.     missile.nextthink = flytime + time;
  196.     missile.think = ShalHome;
  197.     missile.enemy = self.enemy;
  198.     missile.touch = ShalMissileTouch;
  199. };
  200.  
  201. void() ShalHome =
  202. {
  203.     local vector    dir, vtemp;
  204.     vtemp = self.enemy.origin + '0 0 10';
  205.     if (self.enemy.health < 1)
  206.     {
  207.         remove(self);
  208.         return;
  209.     }
  210.     dir = normalize(vtemp - self.origin);
  211.     if (skill == 3)
  212.         self.velocity = dir * 350;
  213.     else
  214.         self.velocity = dir * 250;
  215.     self.nextthink = time + 0.2;
  216.     self.think = ShalHome;    
  217. };
  218.  
  219. void() ShalMissileTouch =
  220. {
  221.     if (other == self.owner)
  222.         return;        // don't explode on owner
  223.  
  224.     if (other.classname == "monster_zombie")
  225.         T_Damage (other, self, self, 110);    
  226.     T_RadiusDamage (self, self.owner, 40, world);
  227.     sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
  228.  
  229.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  230.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  231.     WriteCoord (MSG_BROADCAST, self.origin_x);
  232.     WriteCoord (MSG_BROADCAST, self.origin_y);
  233.     WriteCoord (MSG_BROADCAST, self.origin_z);
  234.  
  235.     self.velocity = '0 0 0';
  236.     self.touch = SUB_Null;
  237.     setmodel (self, "progs/s_explod.spr");
  238.     self.solid = SOLID_NOT;
  239.     s_explode1 ();
  240. };
  241.  
  242. //=================================================================
  243.  
  244. /*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) Ambush
  245. */
  246. void() monster_shalrath =
  247. {
  248.     if (deathmatch)
  249.     {
  250.         remove(self);
  251.         return;
  252.     }
  253.     precache_model2 ("progs/shalrath.mdl");
  254.     precache_model2 ("progs/h_shal.mdl");
  255.     precache_model2 ("progs/v_spike.mdl");
  256.     
  257.     precache_sound2 ("shalrath/attack.wav");
  258.     precache_sound2 ("shalrath/attack2.wav");
  259.     precache_sound2 ("shalrath/death.wav");
  260.     precache_sound2 ("shalrath/idle.wav");
  261.     precache_sound2 ("shalrath/pain.wav");
  262.     precache_sound2 ("shalrath/sight.wav");
  263.     
  264.     self.solid = SOLID_SLIDEBOX;
  265.     self.movetype = MOVETYPE_STEP;
  266.     
  267.     setmodel (self, "progs/shalrath.mdl");
  268.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  269.     self.health = 400;
  270.  
  271.     self.th_stand = shal_stand;
  272.     self.th_walk = shal_walk1;
  273.     self.th_run = shal_run1;
  274.     self.th_die = shalrath_die;
  275.     self.th_pain = shalrath_pain;
  276.     self.th_missile = shal_attack1;
  277.  
  278.     self.think = walkmonster_start;
  279.     self.nextthink = time + 0.1 + random ()*0.1;    
  280.  
  281. };
  282.